// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once // 防止头文件被重复包含

#include "GameFramework/Actor.h" // 引入Actor基类
#include "Interaction/IInteractableTarget.h" // 引入可交互目标接口
#include "Interaction/InteractionOption.h" // 引入交互选项
#include "Inventory/IPickupable.h" // 引入可拾取接口

#include "LyraWorldCollectable.generated.h" // 引入UE生成的代码头文件

class UObject; // 前向声明UObject类
struct FInteractionQuery; // 前向声明FInteractionQuery结构体

/**
 * 可收集的世界物品
 */
UCLASS(Abstract, Blueprintable) // UE类宏，抽象类，可蓝图化
class ALyraWorldCollectable : public AActor, public IInteractableTarget, public IPickupable // 继承自AActor，并实现两个接口
{
	GENERATED_BODY() // UE代码生成宏

public:

	ALyraWorldCollectable(); // 构造函数声明

	virtual void GatherInteractionOptions(const FInteractionQuery& InteractQuery, FInteractionOptionBuilder& InteractionBuilder) override; // 重写收集交互选项函数
	virtual FInventoryPickup GetPickupInventory() const override; // 重写获取拾取物品函数

protected:
	UPROPERTY(EditAnywhere) // UE属性宏，任意位置可编辑
	FInteractionOption Option; // 交互选项

	UPROPERTY(EditAnywhere) // UE属性宏，任意位置可编辑
	FInventoryPickup StaticInventory; // 静态物品拾取
};